﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class prestamoController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /prestamo/

        public ActionResult Index(int id)
        {

            var query = entidades.GetPrestamosById(id).ToList();
            var result = (from pr in query
                           select new
                       {
                           Id = pr.Id,
                           FechaS = string.Format("{0:d}", pr.FechaS),
                           FechaE = string.Format("{0:d}", pr.FechaE),
                           Monto = pr.Monto,
                           Cuotas = pr.Cuotas,
                           JefeArea = pr.JefeArea,
                           Director = pr.Director,
                           Aprobado = pr.Aprobado
                        }).ToList();
            return Json(new { grid = query, total = query.Count() }, JsonRequestBehavior.AllowGet);

            //var query = entidades.PRESTADELDSCTOes.
            //    Join(entidades.PERIODOLABORALs, pr => pr.IdPeriodoLaboral, pl => pl.IdPeriodoLaboral, (pr, pl) => new
            //    {
            //        pr.IdPrestAdelDscto,
            //        pr.monto,
            //        pr.Fechasolicitud,
            //        pr.Fechaaprobacion,
            //        pr.AutorizadoPor,
            //        pl.IdPersonal,
            //        pr.tipo,
            //        pr.aprobado,
            //        pr.cuotas
            //    })
            //    .Where(pr => pr.IdPersonal == id);

            //var result = (from pr in query.OrderByDescending(pr => pr.IdPrestAdelDscto).ToList()
            //              //join ja in entidades.PERSONALs on pr.AutorizadoPor equals ja.IdPersonal
            //              join aut in entidades.PERSONALs on pr.AutorizadoPor equals aut.IdPersonal into atr
            //              from x in atr.DefaultIfEmpty()
            //              //join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
            //              where pr.tipo == 2
            //              select new
            //              {
            //                  Id = pr.IdPrestAdelDscto,
            //                  FechaS = string.Format("{0:d}", pr.Fechasolicitud),
            //                  FechaE = string.Format("{0:d}", pr.Fechaaprobacion),
            //                  Monto = pr.monto,
            //                  Cuotas = pr.cuotas,
            //                  AutorizadoPor = (x == null ? String.Empty : x.ApePaterno + " " + x.ApeMaterno + " " + x.Nombres),//ja.ApePaterno + " " + ja.ApeMaterno + " " + ja.Nombres,
            //                  Aprobado = pr.aprobado
            //              }).ToList();

            //return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);


        }

        //
        // GET: /prestamo/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /prestamo/Create

        public ActionResult Create()
        {
            //var query = entidades.PAMaximoCuotasPrestamo().ToList();
            //ViewData["maxcuotas"] = query[0].MAXCOUTAS.ToString();
            return View();
        } 

        //
        // POST: /prestamo/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, PRESTADELDSCTO PRESTADELDSCTO)
        {
            try
            {
                // TODO: Add insert logic here
                int idpersonal = Convert.ToInt32(Request.Params["idpersonal"]);
                var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);

                try
                {
                    // TODO: Add insert logic here
                    if (ModelState.IsValid)
                    {
                        //de 7
                        var cadelanto = new PRESTADELDSCTO();
                        cadelanto.tipo = 2;
                        cadelanto.aprobado = false;

                        var query = entidades.PERIODOLABORALs
                            .Where(pr => pr.IdPersonal == idpersonal)
                            .Where(pr => pr.IdMotivoFinDePeriodo == null)
                            .ToList();
                        int IdPeriodoLaboral = Convert.ToInt32(query[0].IdPeriodoLaboral.ToString());
                        cadelanto.IdPeriodoLaboral = IdPeriodoLaboral;
                        collection["IdPeriodoLaboral"] = Convert.ToString(IdPeriodoLaboral);
                        cadelanto.Fechasolicitud = DateTime.Now;
                        TryUpdateModel(cadelanto, collection.ToValueProvider());
                        entidades.AddToPRESTADELDSCTOes(cadelanto);
                        entidades.SaveChanges();


                        try
                        {
                            entidades.RDISTRIBUIRCUOTAS(cadelanto.cuotas, Convert.ToInt32(cadelanto.IdPrestAdelDscto), cadelanto.monto, Convert.ToInt32(ejm.idejerciciomes));

                            return Content("OK");
                        }
                        catch //(Exception e)
                        {

                            return Content("Se produjo un error");
                            //eturn Content("Error en la Distribucion de Cuotas");
                            //return Content(e.Message);
                        }

                        
                    }

                    return View();
                    //return RedirectToAction("Index");
                }
                catch (Exception ex)
                {
                    return Content(ex.Message);
                }
            }
            catch
            {
                return View();
            }

        }
        
        //
        // GET: /prestamo/Edit/5
 
        public ActionResult Edit(int id)
        {
            var eprestamo = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(eprestamo);
        }

        //
        // POST: /prestamo/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            var eprestamo = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    var ejm = entidades.EJERCICIOMES.Single(em => em.vigente == true);
                    TryUpdateModel(eprestamo);
                    entidades.SaveChanges();
                    entidades.RDISTRIBUIRCUOTAS(eprestamo.cuotas, Convert.ToInt32(eprestamo.IdPrestAdelDscto), eprestamo.monto, Convert.ToInt32(ejm.idejerciciomes));
                    return Content("OK");
                }
                return View(eprestamo);
            }
            catch
            {
                return View(eprestamo);
            }
        }
        //Aprobar

        public ActionResult maxcuotas()
        {
            var query = entidades.PAMaximoCuotasPrestamo().ToList();
            return Content(query[0].MAXCOUTAS.ToString());

        }


        public ActionResult Autoriza(int id)
        {
            var query = entidades.PersonalAutoriza(id).ToList();
            return Json(new { grid = query, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        //
        public ActionResult Aprobar(int id)
        {
            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            return View(edescuento);
        }

        //
        // POST: /descuento/Edit/5


        [HttpPost]
        public ActionResult Aprobar(int id, FormCollection collection, HttpPostedFileBase adjunto)
        {

            var edescuento = entidades.PRESTADELDSCTOes.Single(ed => ed.IdPrestAdelDscto == id);
            int autorizador = Convert.ToInt32(collection["autorizador"]);

            //return Content(autorizador.ToString());

            if (autorizador > 0)
            {

                try
                {
                    // TODO: Add update logic here
                    if (ModelState.IsValid)
                    {
                        string grupos = "";
                        if (adjunto != null)
                        {
                            grupos = adjunto.FileName.ToString();
                            if (grupos.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                            {
                                adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Prestamo/") + Convert.ToString(edescuento.IdPrestAdelDscto) + ".pdf");
                            }
                            else
                            {
                                ViewData["ERRORDSCTO"] = "Seleccione Documento PDF";
                                return View(edescuento);
                            }
                        }
                        /*else
                        {
                            ViewData["ERRORDSCTO"] = "Es Necesario Adjuntar Documento De Sustento";
                            return View(edescuento);
                        }*/

                        edescuento.aprobado = true;
                        edescuento.Fechaaprobacion = DateTime.Now;
                        edescuento.AutorizadoPor = Convert.ToInt32(autorizador);

                        TryUpdateModel(edescuento);
                        entidades.SaveChanges();
                        return Content("OK");
                    }
                    return Content("Datos Invalidos");
                    //return View(edescuento);
                }
                catch
                {
                    return Content("Error procesando los datos");

                    //return View(edescuento);
                }
            }
            else
            {
                //ViewData["ERRORDSCTO"] = "Error en el envio de datos";
                return Content("Error en el envio de datos");
            }
        }
        // GET: /prestamo/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /prestamo/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
